/**
 * 1. 前缀版
 * 变量的值都会在语句被求值之前改变
 */
let a = 10

let b = ++a
console.log(b) //11
console.log(a) //11

let c = --a
console.log(c) //10
console.log(a) //10

/**
 * 2. 后缀版
 * 变量的值都会在语句被求值之前改变
 */
let a1 = 10

let b1 = a1++
console.log(b1) //10
console.log(a1) //11

let c1 = a1--
console.log(c1) //11
console.log(a1) //10

/**
 * 上述操作符可以运用于任何值，意思是不限整数值，包括字符串、布尔值、浮点值、对象
 * 规则：
 * ①对于字符串，如果是有效的数值形式，则转换为数值再应用改变。变量类型从字符串变成数值
 * ②对于字符串，如果不是有效的数值形式，则将变量的值设置为 NaN 。变量类型从字符串变成数值
 * ③对于布尔值，如果是 false，则转换为 0 再应用改变。变量类型从布尔值变成数值。
 * ④对于布尔值，如果是 true，则转换为 1 再应用改变。变量类型从布尔值变成数值。
 * ⑤对于浮点值，加 1 或减 1，但是浮点值不准确
 * ⑥如果是对象，则调用其valueOf()方法取得可以操作的值。对得到的值应用上述规则
 如果是 NaN，则调用 toString()并再次应用其他规则。变量类型从对象变成数值。
 */
let str1 = '11'
console.log(++str1) //12

let boolean1 = true
console.log(++boolean1) //2

let obj = {
  valueOf() {
    return 1
  },
}
console.log(--obj) //0
